﻿using System.ComponentModel.DataAnnotations;
using Fadada.FASC.SDK.DotNetCore.Attributes;
using Newtonsoft.Json;

namespace Fadada.FASC.SDK.DotNetCore.Model
{
    [RemoteService("/sign-task/create-with-template","POST")]

    public class SignTaskCreateTemplate
    {
        /// <summary>
        /// 签署任务主题。长度最大100个字符。
        /// 其他参与方在收到的通知和打开的页面
        /// 上都可以醒目地看到该主题，并可作为
        /// 各参与方管理和检索的关键标题，因此
        /// 该参数非常重要，请认真编写。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "signTaskSubject",
            Required = Newtonsoft.Json.Required.Always)]
        [MaxLength(100)]
        public string SignTaskSubject { get; set; }

        /// <summary>
        /// 该签署任务的发起方。特别注意授权要求：只有经过该发起方授权后，才可以将该发起方填写到此参数中并发起签署任务。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "initiator",
            Required = Newtonsoft.Json.Required.Always)]
        public OpenId Initiator { get; set; }

        /// <summary>
        /// 任务过期时间。在此时间之后，该签署
        /// 任务将自动终结。在自动终结时，如果
        /// 所有签署方都签署完毕，则任务自动正
        /// 常结束，否则任务将逾期作废。不传该
        /// 参数时默认为90天。
        /// 格式为：Unix标准时间戳，精确到毫
        /// 秒。该参数时间是未来时间，且和当前
        /// 时间差不可小于10分钟(600000) 。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "expiresTime",
            Required = Newtonsoft.Json.Required.AllowNull)]
        public string ExpiresTime { get; set; }

        /// <summary>
        /// 是否自动发起。
        /// false: 不自动发起
        /// true: 自动发起
        /// 默认为false。注意：如果设置为true，
        /// 则必须设置相关文档和参与方等必备要
        /// 素。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "autoInitiate",
            Required = Newtonsoft.Json.Required.AllowNull)]
        public bool AutoInitiate { get; set; }

        /// <summary>
        /// 填写流程中，全部必填控件填写完成后
        /// 是否自动定稿：
        /// false: 不自动定稿
        /// true: 自动定稿
        /// 默认为true。定稿之后就不允许任何参
        /// 与方再填写或修改文档内容了，在填写
        /// 流程结束后会自动将所填写内容合成到
        /// PDF文档中固化下来，并自动进入签署
        /// 流程环节。
        /// 注意：如果在发起签署任务时，文档中
        /// 没有尚未填写的必填控件，则将自动定
        /// 稿文档。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "autoFillFinalize",
            Required = Newtonsoft.Json.Required.AllowNull)]
        public bool AutoFillFinalize { get; set; } = true;

        /// <summary>
        /// 所有签署方签署完成后，签署任务是否
        /// 自动结束：
        /// false: 不自动结束
        /// true: 自动结束
        /// 默认为true。结束后的签署任务将不可
        /// 进行任何变动，并将生成签署完成的签
        /// 名/签章文件(如合同)。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "autoFinish",
            Required = Newtonsoft.Json.Required.AllowNull)]
        public bool AutoFinish { get; set; } = true;


        /// <summary>
        /// 您的业务应用系统中的业务场景信息，
        /// 用于更好地定义业务场景和签署任务的
        /// 关系
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "businessScene",
            Required = Newtonsoft.Json.Required.AllowNull)]
        public BusinessScene BusinessScene { get; set; }

        /// <summary>
        /// 指定签署模板ID。
        /// 法大大平台将从该签署模板中复制预先
        /// 设定的文档、控件和参与方，并对每个
        /// 参与方指定具体的用户或企业。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "signTemplateId",
            Required = Newtonsoft.Json.Required.Always)]
        public string SignTemplateId { get; set; }

        /// <summary>
        /// 填写方列表。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "fillActors",
            Required = Newtonsoft.Json.Required.AllowNull)]
        public FillActorTwo[] FillActors { get; set; }

        /// <summary>
        /// 签署方列表。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "signActors",
            Required = Newtonsoft.Json.Required.AllowNull)]
        public SignActorTwo[] SignActors { get; set; }

        /// <summary>
        /// 抄送方列表。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "ccActors",
            Required = Required.AllowNull)]
        public CCActor[] CcActors { get; set; }
    }
}